from django.db import models


class Menu(models.Model):
    """ Описание объекта Menu для бд """

    name = models.CharField(
        'Название',
        max_length=250
    )
    description = models.TextField(
        'Описание',
        null=True,
        blank=True
    )


    class Meta:
        verbose_name = 'Меню'
        verbose_name_plural = 'Меню'


    def __str__(self):
        return self.name


class MenuElement(models.Model):
    """ Элемент уровня меню """

    name = models.CharField(
        'Название',
        max_length=250
    )
    description = models.TextField(
        'Описание',
        null=True,
        blank=True
    )


    class Meta:
        abstract = True


    def __str__(self):
        return self.name


class FirstLevelElement(MenuElement):
    """ Элемент первого уровня """

    menu = models.ForeignKey(
        Menu,
        on_delete=models.CASCADE,
        verbose_name='Меню'
    )

    class Meta:
        verbose_name = 'Элемент первого уровня'
        verbose_name_plural = 'Элементы первого уровня'


class SecondLevelElement(MenuElement):
    """ Элемент второго уровня """

    first_level = models.ForeignKey(
        'FirstLevelElement',
        on_delete=models.CASCADE,
        verbose_name='Элемент первого уровня'
    )


    class Meta:
        verbose_name = 'Элемент второго уровня'
        verbose_name_plural = 'Элементы второго уровня'


class ThirdLevelElement(MenuElement):
    """ Элемент третьего уровня """

    second_level = models.ForeignKey(
        'SecondLevelElement',
        on_delete=models.CASCADE,
        verbose_name='Элемент второго уровня'
    )

    class Meta:
        verbose_name = 'Элемент третьего уровня'
        verbose_name_plural = 'Элементы третьего уровня'
